package com.bill.concurrency.example.publish;

import com.bill.concurrency.annotations.NotThreadSafe;
import lombok.extern.slf4j.Slf4j;

import java.util.Arrays;

/**
 * states 是这个类的一个私有域。
 * 但是通过 getStates()这个公共的方法，将这个私有的域公布出去了。
 * 对外来说，任何一个线程都可以通过这个公共的方法来变更私有域states的数据了。
 * 所以，对于publisher对象来说，这个私有域的值在多线程的条件下就不确定了。
 */
@Slf4j
@NotThreadSafe
public class UnsafePublisher {

    private String[] states={"a","b","c"};

    public String[] getStates(){
        return states;
    }

    public static void main(String[] args) {
        UnsafePublisher publisher=new UnsafePublisher();
        log.info("{}", Arrays.toString(publisher.getStates()));

        publisher.getStates()[0]="D";
        log.info("{}", Arrays.toString(publisher.getStates()));

    }
}
